#include "menuSDL.h"
#include <time.h>
#include <assert.h>
#include <stdio.h>

/*position de la fenetre*/
const int dimXFenetre=800;
const int dimYFenetre=600;

const int distance =50;

/*hauteur de l'image*/
const int hauteur= 50;

/*largeur de l' image*/
const int largeur=150;

/*espace entre les images*/
const int ecartImage=2;

/* nouvelle position*/
const int pos=80;

static SDL_Rect position(int largeur, int hauteur,int ecart);
static void sdlAideAff(sdlMenu *menu);
static void sdlCreditsAff(sdlMenu *menu);
static void sdlScenarioAff(sdlMenu *menu);
static void sdlRetourMenu(sdlMenu *menu);
//static void sdlPresentation1Aff(sdlMenu *menu);
//static void sdlPresentation2Aff(sdlMenu *menu);
//static void sdlPresentation3Aff(sdlMenu *menu);
void sdlMenuInit(sdlMenu *menu)
{
   assert(SDL_Init( SDL_INIT_EVERYTHING )!= -1 );


    /* Initialisation de surfaceEcran */
    menu->surfaceEcran = SDL_SetVideoMode(   dimXFenetre, dimYFenetre, 32, SDL_SWSURFACE );

    assert( menu->surfaceEcran!=NULL);


    SDL_WM_SetCaption( "Menu-Space-Pursuit.0", NULL );

    /* Ajout des images*/

    menu->imageDeFondMenu = IMG_Load("image/fondMenu.png");
   if (menu->imageDeFondMenu==NULL)
        menu->imageDeFondMenu = IMG_Load("image/fondMenu.png");
    assert( menu->imageDeFondMenu!=NULL);


     menu->imageDeFondAide1= IMG_Load("image/aide1.png");
   if (menu->imageDeFondAide1==NULL)
        menu->imageDeFondAide1 = IMG_Load("image/aide1.png");
    assert( menu->imageDeFondAide1!=NULL);


     menu->imageDeFondAide2 = IMG_Load("image/aide2.png");
   if (menu->imageDeFondAide2==NULL)
        menu->imageDeFondAide2 = IMG_Load("image/aide2.png");
    assert( menu->imageDeFondAide2!=NULL);

    menu->surfaceChoix1 = IMG_Load("image/jouer.png");
    if (menu->surfaceChoix1==NULL)
        menu->surfaceChoix1 = IMG_Load("../image/jouer.png");
    assert( menu->surfaceChoix1!=NULL);


      menu->surfaceChoix2 = IMG_Load("image/solo.png");
    if (menu->surfaceChoix2==NULL)
        menu->surfaceChoix2 = IMG_Load("../image/solo.png");
    assert( menu->surfaceChoix2!=NULL);


    menu->surfaceChoix3 = IMG_Load("image/aide.png");
    if (menu->surfaceChoix3==NULL)
        menu->surfaceChoix3 = IMG_Load("../image/aide.png");
    assert( menu->surfaceChoix3!=NULL);


      menu->surfaceChoix4 = IMG_Load("image/credit.png");
    if (menu->surfaceChoix4==NULL)
        menu->surfaceChoix4 = IMG_Load("../image/credit.png");
    assert( menu->surfaceChoix4!=NULL);


      menu->surfaceChoix5 = IMG_Load("image/scenario.png");
    if (menu->surfaceChoix5==NULL)
        menu->surfaceChoix5 = IMG_Load("../image/scenario.png");
    assert( menu->surfaceChoix5!=NULL);

    /* on charge les remerciements*/
      menu->surfaceCredit1 = IMG_Load("image/credit1.png");
    if (menu->surfaceCredit1==NULL)
        menu->surfaceCredit1 = IMG_Load("../image/credit1.png");
    assert( menu->surfaceCredit1!=NULL);

      menu->surfaceCredit2 = IMG_Load("image/credit2.png");
    if (menu->surfaceCredit2==NULL)
        menu->surfaceCredit2 = IMG_Load("../image/credit2.png");
    assert( menu->surfaceCredit2!=NULL);

    /*on charge les images menu pause*/

          menu->surfacePauseChoix1 = IMG_Load("image/recommencerIllumine.png");
    if (menu->surfacePauseChoix1==NULL)
        menu->surfacePauseChoix1 = IMG_Load("../image/recommencerIllumine.png");
    assert( menu->surfacePauseChoix1!=NULL);


  menu->surfacePauseChoix2 = IMG_Load("image/aideIllumine.png");
    if (menu->surfacePauseChoix2==NULL)
        menu->surfacePauseChoix2 = IMG_Load("image/aideIllumine.png");
    assert( menu->surfacePauseChoix2!=NULL);

      menu->surfacePauseChoix3 = IMG_Load("image/quitterIllumine.png");
    if (menu->surfacePauseChoix3==NULL)
        menu->surfacePauseChoix3 = IMG_Load("image/quitterIllumine.png");
    assert( menu->surfacePauseChoix3!=NULL);


/*on charge l'image de la presentation*/

      menu->surfacePresentation1 = IMG_Load("image/FL&HB.png");
    if (menu->surfacePresentation1==NULL)
        menu->surfacePresentation1 = IMG_Load("../image/FL&HB.png");
    assert( menu->surfacePresentation1!=NULL);


      menu->surfacePresentation2 = IMG_Load("image/FLL.png");
    if (menu->surfacePresentation2==NULL)
        menu->surfacePresentation2 = IMG_Load("../image/FLL.png");
    assert( menu->surfacePresentation2!=NULL);


     menu->surfacePresentation3 = IMG_Load("image/presentent.png");
    if (menu->surfacePresentation3==NULL)
        menu->surfacePresentation3 = IMG_Load("../image/presentent.png");
    assert( menu->surfacePresentation3!=NULL);


     /* logo retour au precedant*/

      menu->surfaceRetour = IMG_Load("image/flecheGaucheBleue.png");
    if (menu->surfaceRetour==NULL)
        menu->surfaceRetour = IMG_Load("../image/flecheGaucheBleue.png");
    assert( menu->surfaceRetour!=NULL);

    /*on charge le logo*/

      menu->surfaceLogo = IMG_Load("image/logo.png");
    if (menu->surfaceLogo==NULL)
        menu->surfaceLogo = IMG_Load("../image/logo.png");
    assert( menu->surfaceLogo!=NULL);

}

void sdlMenuAff(sdlMenu *menu)
{
    int ecart=ecartImage;

    SDL_appliquer_surfaceMenu(  menu->imageDeFondMenu, menu->surfaceEcran,0,0);
    ecart=ecart;

    SDL_appliquer_surfaceMenu(  menu->surfaceChoix1, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y);
    ecart=ecart + hauteur;

    SDL_appliquer_surfaceMenu(  menu->surfaceChoix2, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y);
    ecart=ecart + hauteur;

    SDL_appliquer_surfaceMenu(  menu->surfaceChoix3, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y);
    ecart=ecart + hauteur;

    SDL_appliquer_surfaceMenu(  menu->surfaceChoix4, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y);
    ecart=ecart + hauteur;

    SDL_appliquer_surfaceMenu(  menu->surfaceChoix5, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y);
}

void sdlMenuPauseAff(sdlMenu *menu)
{
    int ecart=ecartImage;

    SDL_appliquer_surfaceMenu(  menu->imageDeFondMenu, menu->surfaceEcran,0,0);
    ecart=ecart;

    SDL_appliquer_surfaceMenu(  menu->surfacePauseChoix1, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y - pos);
    ecart=ecart + hauteur;

    SDL_appliquer_surfaceMenu(  menu->surfacePauseChoix3, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y - pos);
    ecart=ecart + hauteur;

    SDL_appliquer_surfaceMenu(  menu->surfacePauseChoix2, menu->surfaceEcran,(position(largeur,hauteur,ecart)).x,(position(largeur,hauteur,ecart)).y - pos);
    ecart=ecart + hauteur;
}

SDL_Rect position(int largeur, int hauteur,int ecart)
{
    SDL_Rect position;
    position.x= (dimXFenetre/2 - largeur/2);
    position.y= (dimYFenetre/2 - hauteur/2)+ecart;

    return position;
}

void SDL_appliquer_surfaceMenu( SDL_Surface* source, SDL_Surface* destination, int x, int y )
{
    SDL_Rect offset;

    offset.x = x;
    offset.y = y;

   SDL_BlitSurface( source, NULL, destination, &offset );

   //SDL_Flip( destination);
   //SDL_Flip( source);

   assert( SDL_Flip( destination)!=-1 );
   assert( SDL_Flip( source)!=-1 );
}
static void sdlAideAff(sdlMenu *menu)
{

    /*affichage du logo*/


    SDL_appliquer_surfaceMenu(  menu->imageDeFondMenu, menu->surfaceEcran,0,0);


    /*affichage du logo*/
    sdlLogoJeu(menu);

    SDL_appliquer_surfaceMenu(  menu->imageDeFondAide1, menu->surfaceEcran,150,0);

    SDL_appliquer_surfaceMenu(  menu->imageDeFondAide2, menu->surfaceEcran,150,305);

}

static void sdlCreditsAff(sdlMenu *menu)
{

    /*affichage du logo*/
    SDL_appliquer_surfaceMenu(  menu->surfaceLogo, menu->surfaceEcran,300,10);


    /*affichage du logo*/
    sdlLogoJeu(menu);


    SDL_appliquer_surfaceMenu(  menu->surfaceCredit1, menu->surfaceEcran,200,0);

    SDL_appliquer_surfaceMenu(  menu->surfaceCredit2, menu->surfaceEcran,180,290);

}

static void sdlScenarioAff(sdlMenu *menu)
{
    /*affichage du logo*/
    SDL_appliquer_surfaceMenu(  menu->surfaceLogo, menu->surfaceEcran,300,10);


    /*affichage du logo*/
    sdlLogoJeu(menu);


    SDL_appliquer_surfaceMenu(  menu->imageDeFondMenu, menu->surfaceEcran,0,0);


    SDL_appliquer_surfaceMenu(  menu->surfaceCredit1, menu->surfaceEcran,230,150);

}

/*cette fonction nous affiche une image qui nous permet de revenir sur le menu.*/
static void sdlRetourMenu(sdlMenu *menu)
{

  /* on affiche une image à la posision (600,10)*/
    SDL_appliquer_surfaceMenu(  menu->surfaceRetour, menu->surfaceEcran,700,10);

}

void sdlLogoJeu(sdlMenu *menu)
{
  /* on affiche une image à la posision (600,10)*/
    SDL_appliquer_surfaceMenu(  menu->surfaceLogo, menu->surfaceEcran,10,10);
}

void sdlMenuBoucle(sdlMenu *menu,int *pointX,int *pointY,int *movX,int *movY)
{
   /*à faire*/
    SDL_Event event;
    int continuer=1;

    sdlJeu pSdlJeu;

    int posX1Choix1,posX2Choix1;
    int posY1Choix1,posY2Choix1,posY1Choix2,posY2Choix2,posY1Choix3,posY2Choix3,posY1Choix4,posY2Choix4,posY1Choix5,posY2Choix5;
    /*calcule les cordonnés de l'image choisit*/
    posX1Choix1=(position(largeur,hauteur,0)).x;
    posX2Choix1=(position(largeur,hauteur,0)).x + largeur;

    posY1Choix1=(position(largeur,hauteur,0)).y;
    posY2Choix1=((position(largeur,hauteur,0)).y) + hauteur;


    posY1Choix2=posY2Choix1 + ecartImage;
    posY2Choix2= posY1Choix2 + hauteur;


    posY1Choix3=posY2Choix2;
    posY2Choix3=posY1Choix3 + hauteur;

    posY1Choix4=posY2Choix3;
    posY2Choix4=posY1Choix4 + hauteur;

    posY1Choix5=posY2Choix4;
    posY2Choix5=posY1Choix5 + hauteur;
    /* diapo*/
    //tempsActuel = SDL_GetTicks();
    //if (tempsActuel - tempsPrecedent > 120) /* Si 30 ms se sont écoulées */
    //{

        /*fin diapo */
        while (continuer)
        {
            SDL_PollEvent( &event );
         while( SDL_PollEvent( &event ) )
          {
               if ( event.type == SDL_MOUSEMOTION)
               {/*movement de la souris*/

                      *movX = event.motion.xrel;
                      *movY = event.motion.yrel;

               }

                 if ( event.type == SDL_MOUSEBUTTONDOWN)
                 {
                     /*boutton appuyer, calcule les coordonnés de la position*/
                      *pointX = event.motion.x;
                      *pointY = event.motion.y;

                      //printf("%d, %d, %d, %d\n", *pointX, posX1Choix1, *pointX, posX2Choix1);

                      if( (*(pointX)>posX1Choix1) && (*(pointX)<posX2Choix1))
                       {
                           if( (*pointY>posY1Choix1) && (*pointY<posY2Choix1))
                           {
                               //printf("%d, %d, %d, %d\n", *pointX, posX1Choix1, *pointY, posY2Choix1);
                               /* affichage du jeu*/

                               sdljeuInit(&pSdlJeu);
                               sdljeuAff(&pSdlJeu);
                               sdljeuBoucle(&pSdlJeu);
                               assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                            } /*else if( (*pointY>posY1Choix2) && (*pointY<posY2Choix2))
                                    {
                                     affichage du jeu mode Solo

                                     sdljeuInit(&pSdlJeu);
                                     sdljeuAff(&pSdlJeu);
                                     sdljeuBoucle1Jouer(&pSdlJeu);
                                     assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                    }*/ else if( (*pointY>posY1Choix3) && (*pointY<posY2Choix3))
                                          {
                                            /* affichage de l' aide;*/
                                            sdlAideAff(menu);
                                            assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                           }else if( (*pointY>posY1Choix4) && (*pointY<posY2Choix4))
                                             {
                                              /*affichage du menu credits*/

                                             sdlCreditsAff(menu);
                                             assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                             } else if( (*pointY>posY1Choix5) && (*pointY<posY2Choix5))
                                                    {
                                                            /* affichage du menu senario*/

                                                        sdlScenarioAff(menu);
                                                        assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                                    }
                                } else if( (*(pointX)>600) && (*(pointX)<750))
                                    {
                                        if( (*pointY>10) && (*pointY<60))
                                         {
                                           /* affichage du menu;*/
                                          sdlMenuAff(menu);
                                          sdlLogoJeu(menu);
                                          assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                        }
                                    }else if( (*(pointX)>400) && (*(pointX)<500))
                                    {
                                        if( (*pointY>10) && (*pointY<100))
                                         {
                                           /* affichage du menu;*/
                                          sdlLogoJeu(menu);
                                          assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                        }
                                    }


                                                 continuer=1;
                        }


                if ( event.type == SDL_MOUSEBUTTONUP)
                {
                     /*boutton relaché*/
                     sdlRetourMenu(menu);
                     assert( SDL_Flip( menu->surfaceEcran )!=-1 );
                     continuer=1;

                }

                if ( event.key.keysym.sym == SDLK_ESCAPE)
                {
                      /*echapp du clavier appuyer*/
                     sdlMenuPauseAff(menu);
                     assert( SDL_Flip( menu->surfaceEcran )!=-1 );
                     continuer=1;

                }


                if ( event.type == SDL_QUIT)
                {
                    /*croix appuyer*/
                        continuer=0;

                }

          }
        }
    }
/*
    tempsActuel = SDL_GetTicks();
    if (tempsActuel - tempsPrecedent < 30)
    {
    //aff presentation1
    sdlPresentation1Aff(menu);
    }
      tempsActuel = SDL_GetTicks();
    if ((tempsActuel - tempsPrecedent > 30) && (tempsActuel - tempsPrecedent < 60))
    {
    //aff presentation2
      sdlPresentation2Aff(menu);
    }
       tempsActuel = SDL_GetTicks();
    if ((tempsActuel - tempsPrecedent > 60) && (tempsActuel - tempsPrecedent < 90))
    {
    //aff presentation3
      sdlPresentation3Aff(menu);
    }
      tempsActuel = SDL_GetTicks();
    if ((tempsActuel - tempsPrecedent > 90) && (tempsActuel - tempsPrecedent < 120))
    {
    //aff presentation4
    }*/


//boucle pause

void sdlMenuBouclePause(sdlMenu *menu,int *pointX,int *pointY,int *movX,int *movY)
{
   /*à faire*/
    SDL_Event event;
    int continuer=1;
    sdlJeu pSdlJeu;

    int posX1Choix1,posX2Choix1;
    int posY1Choix1,posY2Choix1,posY1Choix2,posY2Choix2,posY1Choix3,posY2Choix3;
    /*calcule les cordonnés de l'image choisit*/
    posX1Choix1=(position(largeur,hauteur,0)).x;
    posX2Choix1=(position(largeur,hauteur,0)).x + largeur;

    posY1Choix1=(position(largeur,hauteur,0)).y;
    posY2Choix1=(position(largeur,hauteur,0)).y + hauteur;


    posY1Choix2=posY2Choix1 + ecartImage;
    posY2Choix2= posY1Choix2 + hauteur;


    posY1Choix3=posY2Choix2;
    posY2Choix3=posY1Choix3 + hauteur;

    while (continuer)
    {
        SDL_PollEvent( &event );
     while( SDL_PollEvent( &event ) )
      {
           if ( event.type == SDL_MOUSEMOTION)
           {/*movement de la souris*/

                  *movX = event.motion.xrel;
                  *movY = event.motion.yrel;

           }

             if ( event.type == SDL_MOUSEBUTTONDOWN)
             {
                 /*boutton appuyer, calcule les coordonnés de la position*/
                  *pointX = event.motion.x;
                  *pointY = event.motion.y;

                  //printf("%d, %d, %d, %d\n", *pointX, posX1Choix1, *pointX, posX2Choix1);

                  if( (*(pointX)>posX1Choix1) && (*(pointX)<posX2Choix1))
                   {
                       if( (*pointY>posY1Choix1) && (*pointY<posY2Choix1))
                       {
                           /* affichage du jeu*/

                           sdljeuInit(&pSdlJeu);
                           sdljeuAff(&pSdlJeu);
                           sdljeuBoucle(&pSdlJeu);
                           assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                        } else if( (*pointY>posY1Choix2) && (*pointY<posY2Choix2))
                                      {
                                        /* affichage de l' aide;*/
                                        sdlAideAff(menu);
                                        assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                       }else if( (*pointY>posY1Choix3) && (*pointY<posY2Choix3))
                                         {
                                          /*quitter*/
                                            continuer=0;


                                          }
                                        else if( (*(pointX)>600) && (*(pointX)<750))
                                            {
                                                if( (*pointY>10) && (*pointY<60))
                                                 {
                                                   /* affichage du menu;*/
                                                  sdlMenuAff(menu);
                                                  sdlLogoJeu(menu);
                                                  assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                                }
                                            }else if( (*(pointX)>400) && (*(pointX)<500))
                                            {
                                                if( (*pointY>10) && (*pointY<100))
                                                 {
                                                   /* affichage du menu;*/
                                                  sdlLogoJeu(menu);
                                                  assert( SDL_Flip( menu->surfaceEcran )!=-1 );

                                                }
                                            }


                                             continuer=1;
                    }
             }


            if ( event.type == SDL_MOUSEBUTTONUP)
            {
                 /*boutton relaché*/
                 sdlRetourMenu(menu);
                 assert( SDL_Flip( menu->surfaceEcran )!=-1 );
                 continuer=1;

            }

            if ( event.key.keysym.sym == SDLK_ESCAPE)
            {
                  /*echapp du clavier appuyer, on affiche le menu normal*/
                 sdlMenuAff(menu);
                 assert( SDL_Flip( menu->surfaceEcran )!=-1 );
                 continuer=1;

            }


            if ( event.type == SDL_QUIT)
            {
                /*croix appuyer*/
                    continuer=0;

            }

      }
    }

}

/*
SDL_Surface *SDL_charger_imageMenu(const char* nomFichier )
{
    SDL_Surface* imageMenuChargee = NULL;
    SDL_Surface* imageMenuOptimisee = NULL;

    imageMenuChargee = IMG_Load( nomFichier );

    if ( imageMenuChargee != NULL )
    {
        imageMenuOptimisee = SDL_DisplayFormat( imageMenuChargee );
        SDL_FreeSurface( imageMenuChargee );
    }

    return imageMenuOptimisee;
}
*/
void sdlMenuLibere(sdlMenu *menu)
{
    SDL_FreeSurface( menu->surfaceEcran );
    SDL_FreeSurface( menu->imageDeFondMenu );
    SDL_FreeSurface( menu->imageDeFondAide1 );
    SDL_FreeSurface( menu->imageDeFondAide2 );
    SDL_FreeSurface( menu->surfaceCredit1 );
    SDL_FreeSurface( menu->surfaceCredit2 );

    SDL_FreeSurface( menu->surfaceChoix1 );
    SDL_FreeSurface( menu->surfaceChoix2 );
    SDL_FreeSurface( menu->surfaceChoix3 );
    SDL_FreeSurface( menu->surfaceChoix4 );
    SDL_FreeSurface( menu->surfaceChoix5 );

    SDL_FreeSurface( menu->surfacePauseChoix1 );
    SDL_FreeSurface( menu->surfacePauseChoix2 );
    SDL_FreeSurface( menu->surfacePauseChoix3 );

    SDL_FreeSurface( menu->surfacePresentation1 );
    SDL_FreeSurface( menu->surfacePresentation2 );
    SDL_FreeSurface( menu->surfacePresentation3 );

    SDL_FreeSurface( menu->surfaceLogo);

    SDL_FreeSurface( menu->surfaceRetour);

    SDL_Quit();
}

